// src/types.ts

/**
 * 表示一个只读的四元数。
 * 四元数是一个长度为 4 的数组 `[x, y, z, w]`，用于表示旋转。
 * @typedef {readonly [number, number, number, number]} ReadonlyQuat
 */
export type ReadonlyQuat = readonly [number, number, number, number];

/**
 * 表示一个可变的四元数。
 * 四元数是一个长度为 4 的数组 `[x, y, z, w]`，用于表示旋转。
 * @typedef {[number, number, number, number]} Quat
 */
export type Quat = [number, number, number, number];

/**
 * 表示一个只读的三维向量。
 * 三维向量是一个长度为 3 的数组 `[x, y, z]`，用于表示空间中的点或方向。
 * @typedef {readonly [number, number, number]} ReadonlyVec3
 */
export type ReadonlyVec3 = readonly [number, number, number];

/**
 * 表示一个可变的三维向量。
 * 三维向量是一个长度为 3 的数组 `[x, y, z]`，用于表示空间中的点或方向。
 * @typedef {[number, number, number]} Vec3
 */
export type Vec3 = [number, number, number];

/**
 * 表示一个只读的 3x3 矩阵。
 * 3x3 矩阵是一个长度为 9 的数组，按行优先顺序存储：
 * ```
 * [m00, m01, m02,
 *  m10, m11, m12,
 *  m20, m21, m22]
 * ```
 * @typedef {readonly [
 *   number, number, number,
 *   number, number, number,
 *   number, number, number
 * ]} ReadonlyMat3
 */
export type ReadonlyMat3 = readonly [
  number, number, number,
  number, number, number,
  number, number, number
];

/**
 * 表示一个可变的 3x3 矩阵。
 * 3x3 矩阵是一个长度为 9 的数组，按行优先顺序存储：
 * ```
 * [m00, m01, m02,
 *  m10, m11, m12,
 *  m20, m21, m22]
 * ```
 * @typedef {[
 *   number, number, number,
 *   number, number, number,
 *   number, number, number
 * ]} Mat3
 */
export type Mat3 = [
  number, number, number,
  number, number, number,
  number, number, number
];